package me.realirea.api;

import com.google.inject.ImplementedBy;
import me.realirea.Tombstone;
import me.realirea.api.event.TombstoneBreakEvent;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;

import java.util.List;

/**
 * 墓碑管理
 */
@ImplementedBy(Tombstone.class)
public interface TombstoneManager {

    /**
     * 判断一个木牌是否是墓碑
     *
     * @param sign 木牌
     * @return 是否是墓碑
     */
    boolean isTombstone(@NotNull Sign sign);

    /**
     * 触发墓碑破坏事件
     *
     * @param sign 木牌
     * @return 墓碑破坏事件
     */
    TombstoneBreakEvent callTombstoneBreakEvent(@NotNull Player player, @NotNull Sign sign);

    /**
     * 生成墓碑
     *
     * @param player 玩家
     * @param block  方块
     * @param stacks 物品
     */
    void generateTombstone(@NotNull Player player, @NotNull Block block, @NotNull List<ItemStack> stacks);

    /**
     * 生成墓碑
     *
     * @param player   玩家
     * @param location 位置
     * @param stacks   物品
     * @throws NullPointerException 当 Location 不存在 World 属性时抛出
     */
    default void generateTombstone(@NotNull Player player, @NotNull Location location, @NotNull List<ItemStack> stacks) throws NullPointerException {
        generateTombstone(player, location.getBlock(), stacks);
    }
}
